Middleware হল সফটওয়্যার বা কোডের একটি স্তর যা ASP.NET Core অ্যাপ্লিকেশনটির রিকোয়েস্ট-পদ্ধতি চেইনে ব্যবহৃত হয়। এটি একটি পেইজ বা HTTP রিকোয়েস্ট প্রসেসিং সিস্টেমে ইনপুট এবং আউটপুটের মধ্যে একটি "মাঝখানে" অবস্থান নেয়। সহজভাবে বললে, Middleware কোডের একাধিক অংশ একে অপরের সাথে যোগাযোগ করতে সক্ষম করে, যাতে সার্ভার ক্লায়েন্ট থেকে আসা রিকোয়েস্ট এবং সার্ভার থেকে বের হওয়া রেসপন্স প্রসেস করতে পারে।
এটি অ্যাপ্লিকেশনের রিকোয়েস্ট লাইফসাইকেল পরিচালনার জন্য গুরুত্বপূর্ণ ভূমিকা পালন করে এবং সাধারণত একটি pipeline (পাইপলাইন) হিসেবে কাজ করে, যেখানে একাধিক middleware একে অপরের সাথে সম্পর্কিতভাবে কাজ করে।
Middleware কিভাবে কাজ করে?
Middleware সাধারণত রিকোয়েস্ট রিসিভ করার পর প্রথমে প্রসেস শুরু করে এবং তারপর রেসপন্স আউটপুট দেয়। যখন একটি HTTP রিকোয়েস্ট একটি ASP.NET Core অ্যাপ্লিকেশনে আসে, তখন তা আগে middleware পিপলাইনের মধ্য দিয়ে প্রবাহিত হয় এবং প্রত্যেকটি middleware এর মধ্যে কিছু নির্দিষ্ট কাজ সম্পাদন করে। এর পরে, রেসপন্স আবার middleware পিপলাইনে মাধ্যমে ফিরে যায়।
একটি সাধারণ middleware পিপলাইন নিম্নরূপ কাজ করে:
- রিকোয়েস্ট প্রবাহ: যখন ক্লায়েন্ট একটি HTTP রিকোয়েস্ট পাঠায়, তা প্রথমে middleware পিপলাইনে প্রবাহিত হয়। প্রতিটি middleware এর মধ্যে কিছু নির্দিষ্ট কাজ সম্পাদিত হয়, যেমন রিকোয়েস্ট লোগিং, রিকোয়েস্ট ভ্যালিডেশন, কিংবা ইউজার অথেনটিকেশন।
- Middleware এর কাজ: Middleware গুলি রিকোয়েস্টে কোন কাজ করে দেখিয়ে বা কোনও নির্দিষ্ট তথ্য যোগ করে। উদাহরণস্বরূপ, অ্যাপ্লিকেশন একটি logging middleware ব্যবহার করতে পারে যা প্রতিটি রিকোয়েস্টের লোগ জেনারেট করবে।
- Next Middleware: যদি একটি middleware তার কাজ শেষ করে পরবর্তী middleware এ রিকোয়েস্ট পাঠাতে চায়, তবে এটি
next()মেথড কল করে। এর মাধ্যমে পরবর্তী middleware কাজ শুরু করবে। - রেসপন্স: একবার সমস্ত middleware রিকোয়েস্ট প্রসেস করে ফেললে, তখন রেসপন্স অ্যাপ্লিকেশন থেকে ক্লায়েন্টের কাছে ফিরে যায়। পিপলাইনের মধ্যে যদি কোনো middleware রেসপন্সে কোন পরিবর্তন করতে চায় (যেমন, রেসপন্স হেডার পরিবর্তন করা বা কন্টেন্ট লম্বা সময়ের জন্য ক্যাশে করা), তবে তা করতে পারে।
- Middleware এর শেষে: যখন রেসপন্স ফিরে আসবে, তখন প্রাথমিক middleware আবার "reverse" অর্ডারে কাজ করতে পারে। এতে, রেসপন্স ফেরত পাঠানোর আগে কিছু কাজ সম্পাদন করা সম্ভব হয়, যেমন লোগিং বা সিকিউরিটি চেক।
Middleware এর উদাহরণ
ASP.NET Core অ্যাপ্লিকেশনগুলিতে বিভিন্ন ধরনের middleware ব্যবহৃত হয়। কিছু উদাহরণ হলো:
- Logging Middleware: অ্যাপ্লিকেশনটি HTTP রিকোয়েস্ট এবং রেসপন্সের লগ রাখতে পারে। এটি সাধারণত প্রতিটি রিকোয়েস্টের পর রিকোয়েস্টের তথ্য এবং সার্ভারের রেসপন্সের স্টেটাস কোড লোগ করে রাখে।
- Authentication Middleware: এটি রিকোয়েস্টের মাধ্যমে ইউজারের অথেনটিকেশন চেক করে, যদি ইউজার সঠিকভাবে লগইন না করে থাকে, তবে তাকে লগইন পেজে রিডাইরেক্ট করে।
- Authorization Middleware: Authentication-এর পরে, Authorization Middleware ইউজারের অনুমতি যাচাই করে। এটি চেক করে যে, ব্যবহারকারী নির্দিষ্ট রিসোর্সে প্রবেশ করার অনুমতি পায় কিনা।
- Exception Handling Middleware: এটি অ্যাপ্লিকেশনের মধ্যে যে কোন এক্সসেপশন বা ত্রুটি হ্যান্ডেল করে, যাতে সার্ভারে কোন আউটপুট না আসে অথবা ইউজারের কাছে সঠিক ত্রুটি বার্তা প্রদর্শিত হয়।
- Static Files Middleware: যদি আপনার অ্যাপ্লিকেশন স্ট্যাটিক ফাইল (যেমন HTML, CSS, JavaScript, ইমেজ) ব্যবহার করে থাকে, তবে এটি সেই ফাইলগুলো ক্লায়েন্টে সঠিকভাবে সার্ভ করতে সাহায্য করে।
Middleware কনফিগারেশন এবং Custom Middleware তৈরি
ASP.NET Core অ্যাপ্লিকেশনে middleware কনফিগার করা হয় Startup.cs ফাইলের Configure মেথডে। এখানে আপনি middleware গুলি যোগ করতে পারেন এবং তাদের ক্রম ঠিক করতে পারেন।
public class Startup
{
public void Configure(IApplicationBuilder app)
{
// Default middleware
app.UseRouting(); // Request routing middleware
app.UseAuthentication(); // Authentication middleware
app.UseAuthorization(); // Authorization middleware
// Custom middleware
app.Use(async (context, next) =>
{
// Custom logic before passing the request
await next.Invoke();
// Custom logic after the request has passed through the pipeline
});
// Static files middleware
app.UseStaticFiles(); // Serves static files like HTML, CSS, JS
// Fallback to a page or other action if nothing matches
app.UseEndpoints(endpoints =>
{
endpoints.MapControllers(); // MVC Controller endpoints
});
}
}
এখানে Use মেথডটি বিভিন্ন middleware যুক্ত করার জন্য ব্যবহার করা হয়। প্রাথমিকভাবে, middleware গুলি রিকোয়েস্টের উপর কাজ করে, তারপর রেসপন্স ফেরত পাঠায়।
Custom Middleware তৈরি
ASP.NET Core-এ custom middleware তৈরি করা খুবই সহজ। সাধারণত, একটি ক্লাস তৈরি করা হয় যা IMiddleware ইন্টারফেস ইমপ্লিমেন্ট করে বা Invoke মেথডের মাধ্যমে কার্যকর করা হয়।
এখানে একটি উদাহরণ দেওয়া হলো:
public class MyCustomMiddleware
{
private readonly RequestDelegate _next;
public MyCustomMiddleware(RequestDelegate next)
{
_next = next;
}
public async Task InvokeAsync(HttpContext context)
{
// Custom logic before passing to next middleware
Console.WriteLine("Request received by custom middleware");
await _next(context); // Passing control to next middleware
// Custom logic after the request has passed through the pipeline
Console.WriteLine("Response sent from custom middleware");
}
}
এটি এরপর Startup.cs-এ Configure মেথডে যুক্ত করা হয়:
public void Configure(IApplicationBuilder app)
{
app.UseMiddleware<MyCustomMiddleware>();
}
সারাংশ
Middleware হল .NET Core অ্যাপ্লিকেশনের একটি গুরুত্বপূর্ণ অংশ যা HTTP রিকোয়েস্ট এবং রেসপন্সের মধ্যে একটি পিপলাইন তৈরি করে। এটি বিভিন্ন কাজ যেমন Authentication, Authorization, লোগিং, এক্সসেপশন হ্যান্ডলিং এবং স্ট্যাটিক ফাইল সার্ভিংয়ের জন্য ব্যবহৃত হয়। ASP.NET Core অ্যাপ্লিকেশনে middleware কনফিগার এবং কাস্টম middleware তৈরি করা সহজ, যা অ্যাপ্লিকেশনকে আরও কার্যকর এবং কাস্টমাইজেবল করে তোলে।